
#include "vec3.h"

class Onb {
public:
    Onb()=default;

    Onb(const Vec3&);

    Vec3 operator[](int i) const { return axis[i]; }
    Vec3& operator[](int i) { return axis[i]; }

    Vec3 u() const { return axis[0]; }
    Vec3 v() const { return axis[1]; }
    Vec3 w() const { return axis[2]; }

    Vec3 local(double a, double b, double c) const;

    Vec3 local(const Vec3& a) const;

    Vec3 transform(const Vec3& v) const;

    void build_from_w(const Vec3& w);

public:
    Vec3 axis[3];
};